package com.huohuo.concurrent.syn;


import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 使用synchronized修饰方法，避免在高并发环境下产生相同的订单号。
 *
 */
public class OrderNumberGeneratorSyn {

    public static int count = 0;

    public static Object lock = new Object();

    /**
     * 方法1：方法上使用synchronized来修饰，使其变成同步方法。避免出现相同的订单号。
     * 生成订单号方法
     * @return
     */
    public synchronized String generatorNumber(){
        SimpleDateFormat sf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
        return sf.format( new Date())+"-"+ ++count; //先加1再返回值
    }


    /**
     * 方法2：方法体中使用synchronized修饰代码块，使其变成同步代码块。
     * 也可以避免高并发请求方法时出现相同的订单号。
     * @return
     */
    public  String generatorNumber2(){
        synchronized (lock){
            SimpleDateFormat sf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
            return sf.format( new Date())+"-"+ ++count; //先加1再返回值
        }
    }





}
